# -*- coding:utf8 -*-
import cv2
import os
import shutil
from utils.commonUtils import get_all_file_in_dir


def get_frame_from_video(video_name, save_path, interval):
    """
    视频转图片
    Args:
        video_name:输入视频名字
        interval: 保存图片的帧率间隔
    Returns:
    """

    # 保存图片的路径
    # save_path = video_name.split('.mp4')[0] + '/'
    is_exists = os.path.exists(save_path)
    if not is_exists:
        os.makedirs(save_path)
        print('path of %s is build' % save_path)
    else:
        shutil.rmtree(save_path)
        os.makedirs(save_path)
        print('path of %s already exist and rebuild' % save_path)

    # 开始读视频
    video_capture = cv2.VideoCapture(video_name)
    i = 0
    j = 0

    while True:
        success, frame = video_capture.read()

        if not success:
            print('video is all read')
            break

        i += 1
        if i % interval == 0:
            # 保存图片
            j += 1
            # save_name = save_path + str(j) + '_' + str(i) + '.jpg'
            save_name = save_path + str(i) + '.jpg'
            cv2.imwrite(save_name, frame)
            print('image of %s is saved' % save_name)



def get_video_from_frame(img_path, save_path, fps=30, size=(1920, 1080)):

    fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')  # 设置输出视频为mp4格式
    # fourcc = cv2.VideoWriter_fourcc('I','4','2','0')      # 设置输出视频为avi格式，很占内存

    # cap_fps是帧率，可以根据随意设置；size要和图片的size一样，但是通过img.shape得到图像的参数是
    # （height，width，channel），但是此处的size要传的是（width，height），这里一定要注意注意，
    # 不然结果会打不开，提示“无法解码多工传送的流”等.比如通过img.shape得到常用的图片尺寸
    # （1080,1920,3），则size设为（1920,1080）
    # fps = 30
    # size = (1920, 1080)

    # 设置输出视频的参数，如果是灰度图，可以加上 isColor = 0 这个参数
    # video = cv2.VideoWriter('results/result.avi',fourcc, fps, size, isColor=0)
    video = cv2.VideoWriter(save_path, fourcc, fps, size)

    # 这里直接读取py文件所在目录下的pics目录所有图片。
    file_lst = get_all_file_in_dir(img_path, order='int')
    for filename in file_lst:
        img = cv2.imread(filename)
        video.write(img)
    video.release()

###################################### 附录---备用 #################################

# 如果要转换图像通道
# img = img[...,[2,1,0]]


# 将现成的大内存avi转换为小内存的mp4文件
# from subprocess import call
# command = 'ffmpeg -i results/result.avi results/result.mp4'
# call(command.split())


# video.write默认保存彩色图，如果是灰度图，则应先将其转换为三通道再保存
# img_E = cv2.imread('test/0001.png')
# img_E = cv2.merge((img_E,img_E,img_E))           # 拓展为三通道
# video.write(img_E)


